package org.util.common;

import java.io.File;
import java.io.FileInputStream;

public class JDKVersionUtil {
	
	/**
	 * 测试class文件是否适合本jdk,不考虑兼容问题，只能版本匹配
	 * @param classFile
	 * @return
	 * 2014年6月17日下午3:26:47
	 * eqyun
	 */
	public static boolean isJDKSatisfy(File classFile){
		return compare2Version(getClassJDKVersion(classFile), getSystemJDKVersion());
	}
	
	public static String getSystemJDKVersion() {
		return System.getProperty("java.version");
	}

	public static String getClassJDKVersion(File classFile) {
		try {
			byte[] data = new byte[8];

			FileInputStream in = new FileInputStream(classFile);
			// 读取文件前8字节
			// 实际上版本号写在第4-7字节上（从第0字节开始算）
			in.read(data, 0, 8);
			in.close();

			// 计算出class文件的主次版本号
			//int minor_version = (((int) data[4]) << 8) + data[5]; 次版本
			int major_version = (((int) data[6]) << 8) + data[7]; //主版本
			return changeInt2JDK(major_version);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	private static String changeInt2JDK(int major_version) {
		switch (major_version) {
		case 48:
			return "1.4";
		case 49:
			return "1.5";
		case 50:
			return "1.6";
		case 51:
			return "1.7";
		case 52:
			return "1.8";
		default:
			return "unknown";
		}
	}

	private static boolean compare2Version(String version1, String version2) {
		return version1.length() > version2.length() ? version1.startsWith(version2) : version2.startsWith(version1);
	}

}
